package service

import (
	"gin/common"
	"gin/common/constant"
	"gin/common/util"
	"gin/system/entity"
	sysEntity "gin/system/entity"
	"github.com/dgrijalva/jwt-go"
	"github.com/gin-gonic/gin"
	"time"
)

//token验证处理

//创建令牌
func CreateToken(c *gin.Context, userName string, loginBody *entity.LoginBody) string {
	var token = util.Uuid()
	//用户权限信息
	sysUser := &sysEntity.SysUserEntity{}
	permission := SysPermissionService(c, sysUser)
	sysUser.Permissions = permission
	sysUser.Token = token

	//TODO 刷新令牌有效期

	// 示例的claims数据，这里可以根据实际需求填充具体的用户信息等
	claims := jwt.MapClaims{
		"UserId":   loginBody.UserId,
		"UserName": loginBody.UserName,
		"Uuid":     token,
	}

	jwtToken, err := GenerateJWTToken(claims)
	if err != nil {
		common.ReturnError(c, constant.ERRORCODE(), err, "token 生成失败", int64(len("0")))
		panic("")
	}

	if len(jwtToken) > 1 {
		return jwtToken
		panic("")
	}
	return jwtToken
}

// Go 语言中使用 jwt-go 库来生成 JWT（JSON Web Token）  依赖引入命令：go get github.com/dgrijalva/jwt-go
func GenerateJWTToken(claims jwt.MapClaims) (string, error) {
	// 定义密钥，用于签名和验证token，需保密
	var secretKey = []byte("login_user_key")
	// 设置token的过期时间，这里设置为1小时后过期，可根据需求调整
	claims["exp"] = time.Now().Add(time.Hour).Unix()

	// 创建一个新的token对象
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

	// 使用密钥对token进行签名并生成最终的token字符串
	tokenString, err := token.SignedString(secretKey)
	if err != nil {
		return "", err
	}

	return tokenString, nil
}

//刷新令牌有效期
